package main

import (
	"fmt"
	"reflect"
)

func main() {

	// byte类型
	var b1 byte
	b1 = 'A' // 必须是单引号
	// b1 = 98  // 必须是单引号
	fmt.Println(reflect.TypeOf(b1)) // 65  uint8
	fmt.Printf("%c\n", b1)
	fmt.Printf("%d\n", b1) // ASCII数字
	fmt.Println(b1)        // ASCII数字

	// uint8类型
	var b2 uint8
	b2 = 65
	// b2 = 'c'
	fmt.Printf("%c\n", b2)
	fmt.Printf("%d\n", b2)
	fmt.Println(b2) // ASCII数字

	// var b3 byte
	var b3 rune
	b3 = '苑'
	// rune，占用4个字节，共32位比特位，所以它和 int32 本质上也没有区别。它表示的是一个 Unicode字符
	fmt.Println(b3, string(b3), reflect.TypeOf(b3))

	// (1) 字符串类型（string） 转为字节串类型（[]byte）
	var s = "苑昊"
	fmt.Println(s, reflect.TypeOf(s)) // 苑昊 string

	var b = []byte(s)                 // 默认用uft-8进行编码
	fmt.Println(b, reflect.TypeOf(b)) // [232 139 145 230 152 138] []uint8

	s1 := "Hello, 世界"
	r1 := []byte(s1)
	r2 := []rune(s1) //占用4个字节，共32位比特位，所以它和 int32 本质上也没有区别。它表示的是一个 Unicode字符
	fmt.Println(r1)  // 输出：[72 101 108 108 111 44 32 228 184 150 231 149 140]
	fmt.Println(r2)  // 输出：[72 101 108 108 111 44 32 19990 30028]

	// (2) byte转为string
	fmt.Println(string(b))
	var data = []byte{121, 117, 97, 110}
	fmt.Println(string(data)) // yuan
}
